package com.gjh.study.algorithm4.sort;

/**
 * 插入排序：从左往右依次处理，每次都与前面的已经排好序的所有值进行比较
 * 将新的值插入合适的位置，即每次都要对已排好序的数组重新排序
 */
public class Insertion extends SortBase {

    @Override
    public void sort(Comparable[] a) {
        int N = a.length;
        // 从第二个值开始与前面的值进行比较
        for (int i = 1; i < N; i++) {
            // 每次都进行比较，如果该值比前面的值小，则进行交换，直到前面的所有值都已经比较完成，这里前面的数组是已经排好序的
            for (int j = i; j > 0 && less(a[j], a[j-1]); j--) {
                exch(a, j, j-1);
            }
        }
    }
}
